package 高性能Golang

import "fmt"

type Pool struct {
	Cap  int
	Host string
}

func WithCap(n int) func(*Pool) { //函数也是一种数据类型，注意一定要传指针
	return func(p *Pool) { //返回函数类型
		p.Cap = n //函数里套函数，所以这里可以取到两个函数的参数
	}
}

type PoolOption func(*Pool) //起个别名,使用设计模式简洁

func WithHost(h string) PoolOption {
	return func(p *Pool) {
		p.Host = h
	}
}

func NewPool(options ...PoolOption) *Pool {
	pool := new(Pool)
	for _, f := range options {
		f(pool)
	}
	return pool
}
func main() {
	p := NewPool(
		WithCap(10),
		WithHost("localhost"),
	)
	fmt.Println(p)
}
